package com.java.mytools.service.impl;

import com.java.mytools.common.utils.SftpUtil;
import com.java.mytools.service.SftpService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * @author wangning
 * @create 2021-08-12 10:43
 * 使用sftp进行文件的上传
 */
@Service
@ConfigurationProperties(prefix = "sftp")//直接这样写会有一个错误警告，不过不影响运行，如果想消除警告可以添加文件处理器
//使用这种方法和 @Value 效果一样，不过比 @Value 更简单些，不过这种是通过set方法注入的，需要写 set 方法，并且属性名和 yaml 中配置的一样
public class SftpServiceImpl implements SftpService {

//	@Value("${sftp.username}")
	private String username;
//	@Value("${sftp.password}")
	private String password;
//	@Value("${sftp.host}")
	private String host;
//	@Value("${sftp.port}")
	private int port;
//	@Value("${sftp.filePath}")
	private String filePath;


	/**
	 *
	 * @param file 上传的文件
	 * @return 返回上传的结果
	 */
	@Override
	public Map<String, String> upload(MultipartFile file) {
		SftpUtil sftpUtil = new SftpUtil(username, password, host, port);
		Map<String, String> map = new HashMap<>();
		try {
			String fileName = sftpUtil.uploadMultipartFile(file, filePath);
			map.put("fileName", fileName);
			map.put("filePath", filePath);
			map.put("res", "000000");
		} catch (Exception e) {
			e.printStackTrace();
			map.put("res", "文件上传失败");
		}
		return map;
	}

	@Override
	public File download(String filename) {
		SftpUtil sftpUtil = new SftpUtil(username, password, host, port);
		try {
			return sftpUtil.downloadFile(filePath, filename, filePath);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}


	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}

	public String getFilePath() {
		return filePath;
	}

	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}
}
